# Copyright 2016, 2017 Peter Dimov
# Copyright 2018-2019 Andrey Semashev
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)

version: 1.0.{build}-{branch}

shallow_clone: true

branches:
  only:
    - master
    - develop
    - /feature\/.*/

environment:
  matrix:
# AppVeyor doesn't provide 64-bit compilers for these MSVC versions
#    - TOOLSET: msvc-9.0
#      ADDRESS_MODEL: 64
#      B2_ARGS: instruction-set=core2
#      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
#    - TOOLSET: msvc-10.0
#      ADDRESS_MODEL: 64
#      B2_ARGS: instruction-set=core2
#      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
#    - TOOLSET: msvc-11.0
#      ADDRESS_MODEL: 64
#      B2_ARGS: instruction-set=core2
#      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    - TOOLSET: msvc-12.0
      ADDRESS_MODEL: 64
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    - TOOLSET: msvc-14.0
      ADDRESS_MODEL: 64
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    - TOOLSET: msvc-14.1
      ADDRESS_MODEL: 64
      CXXSTD: 14,17
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
    - TOOLSET: msvc-14.2
      ADDRESS_MODEL: 64
      CXXSTD: 14,17
      B2_ARGS: instruction-set=core2 define=_WIN32_WINNT=0x0602
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
    - TOOLSET: clang-win
      ADDRESS_MODEL: 64
      CXXSTD: 14,17
      B2_ARGS: instruction-set=core2 cxxflags="-mcx16"
      ENV_SCRIPT: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
    - TOOLSET: gcc
      ADDRESS_MODEL: 64
      CXXSTD: 03,11,03-gnu,11-gnu
      ADDPATH: C:\cygwin64\bin
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    - TOOLSET: gcc
      ADDRESS_MODEL: 64
      CXXSTD: 03,11,14,03-gnu,11-gnu,14-gnu
      ADDPATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    - TOOLSET: gcc
      ADDRESS_MODEL: 64
      CXXSTD: 03,11,14,17,03-gnu,11-gnu,14-gnu,17-gnu
      ADDPATH: C:\mingw-w64\x86_64-7.3.0-posix-seh-rt_v5-rev0\mingw64\bin
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    - TOOLSET: gcc
      ADDRESS_MODEL: 64
      CXXSTD: 03,11,14,17,2a,03-gnu,11-gnu,14-gnu,17-gnu,2a-gnu
      ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015

    - TOOLSET: msvc-9.0
      ADDRESS_MODEL: 32
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    - TOOLSET: msvc-10.0
      ADDRESS_MODEL: 32
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    - TOOLSET: msvc-11.0
      ADDRESS_MODEL: 32
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    - TOOLSET: msvc-12.0
      ADDRESS_MODEL: 32
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    - TOOLSET: msvc-14.0
      ADDRESS_MODEL: 32
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    - TOOLSET: msvc-14.1
      ADDRESS_MODEL: 32
      CXXSTD: 14,17
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
    - TOOLSET: msvc-14.2
      ADDRESS_MODEL: 32
      CXXSTD: 14,17
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
    - TOOLSET: clang-win
      ADDRESS_MODEL: 32
      CXXSTD: 14,17
      B2_ARGS: instruction-set=core2
      ENV_SCRIPT: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
    - TOOLSET: gcc
      ADDRESS_MODEL: 32
      CXXSTD: 03,11,03-gnu,11-gnu
      ADDPATH: C:\cygwin\bin
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    - TOOLSET: gcc
      ADDRESS_MODEL: 32
      CXXSTD: 03,11,03-gnu,11-gnu
      ADDPATH: C:\mingw\bin
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    - TOOLSET: gcc
      ADDRESS_MODEL: 32
      CXXSTD: 03,11,14,03-gnu,11-gnu,14-gnu
      ADDPATH: C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\bin
      B2_ARGS: instruction-set=core2
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    - TEST_CMAKE: 1
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019

install:
  - set GIT_FETCH_JOBS=8
  - set BOOST_BRANCH=develop
  - if "%APPVEYOR_REPO_BRANCH%" == "master" set BOOST_BRANCH=master
  - cd ..
  - git clone -b %BOOST_BRANCH% https://github.com/boostorg/boost.git boost-root
  - cd boost-root
  - git submodule init tools/boostdep
  - git submodule init tools/build
  - git submodule init tools/boost_install
  - git submodule init libs/headers
  - git submodule init libs/config
  - git submodule update --jobs %GIT_FETCH_JOBS%
  - xcopy /s /e /q %APPVEYOR_BUILD_FOLDER% libs\atomic
  - python tools/boostdep/depinst/depinst.py --git_args "--jobs %GIT_FETCH_JOBS%" atomic
  - cmd /c bootstrap
  - b2 -d0 headers

build: off

test_script:
  - PATH=%ADDPATH%;%PATH%
  - if not "%ENV_SCRIPT%" == "" call "%ENV_SCRIPT%"
  - if not "%CXXSTD%" == "" set CXXSTD=cxxstd=%CXXSTD%
  - b2 -j %NUMBER_OF_PROCESSORS% libs/atomic/test variant=release toolset=%TOOLSET% address-model=%ADDRESS_MODEL% %CXXSTD% %B2_ARGS%

for:
  - matrix:
      only: [TEST_CMAKE: 1]
    test_script:
      - mkdir __build_static__
      - cd __build_static__
      - cmake ../libs/atomic/test/test_cmake
      - cmake --build . --target boost_atomic_cmake_self_test -j %NUMBER_OF_PROCESSORS%
      - cd ..
      - mkdir __build_shared__
      - cd __build_shared__
      - cmake -DBUILD_SHARED_LIBS=On ../libs/atomic/test/test_cmake
      - cmake --build . --target boost_atomic_cmake_self_test -j %NUMBER_OF_PROCESSORS%
